/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DickYang
 * Date: 2023-05-05
 * Time: 21:24
 */

//构造方法 this get set
class DateUtil {
    private int year;
    private int month;
    private int day;

    //private关键字实现对类的细节隐藏,对外交互可提供get set 结构
    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    //构造方法:如果没有写任何的构造方法,Java就会提供一个不带参数的构造方法,如果写了构造方法Java都不会提供任何的构造方法了!!!
    //以下两个构造方法的关系发生了重载!!
    //构造方法的方法名与类名一样,没有任何返回值包括void!!
    public DateUtil() {
        this(2000,11,24);//调用当前对象的其他构造方法,此时的this必须放在第一行并且只能在构造方法内使用!!!
        System.out.println("这是一个不带参数的构造方法!");
    }
    public DateUtil(int year,int month,int day) {
        this.year = year;
        this.month =month;
        this.day = day;
        System.out.println("这是一个带有三个参数的构造方法!");
        this.show();//可以再构造方法内部调用当前对象的非静态的成员方法!!
    }

    public void setDate(int year,int month,int day) {
        this.year = year;
        this.month = month;
        this.day = day;

    }
    public void show() {
        System.out.println(year + "年 " + month + "月 " + day + "日 ");
    }
}

public class TestDome1 {
    public static void main(String[] args) {
        DateUtil dateUtil = new DateUtil();
        //使用类对外提供的接口进行赋值
        dateUtil.setYear(2000);
        dateUtil.setMonth(11);
        dateUtil.setDay(8);
        dateUtil.show();
    }
    public static void main3(String[] args) {
        //调用当前对象不带参数的构造方法
        DateUtil dateUtil = new DateUtil();
    }
    public static void main2(String[] args) {
        //通过对象的构造方法初始化对象
        //此时调用带有三个参数的构造方法
        DateUtil dateUtil = new DateUtil(2023,05,05);
        dateUtil.show();
    }
    public static void main1(String[] args) {
        //通过实例化对象调用对象的成员方法为对象赋初始值并调用当前对象的方法
        DateUtil dateUtil = new DateUtil();
        dateUtil.setDate(2023,05,05);
        dateUtil.show();
    }

}
